/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * dlgModificacionOrdenDespacho.java
 *
 * Created on Oct 16, 2011, 11:08:26 PM
 */

package visual.Despacho;

import bentity.beOrdenDespacho;
import bentity.bePedido;
import bentity.beUsuario;
import blogic.blHelper;
import blogic.blLog;
import blogic.blOrdenDespacho;
import dao.daoOrdenDespacho;
import java.sql.Date;
import java.util.ArrayList;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;
import visual.Seguridad.visualHelper;

/**
 *
 * @author renzo
 */
public class dlgModificacionOrdenDespacho extends javax.swing.JDialog {
    private beOrdenDespacho ordenDespacho = null;
    private ArrayList<bePedido> pedidosNuevosElegidos = new ArrayList<bePedido>();
    private beUsuario usuario = null;
    /** Creates new form dlgModificacionOrdenDespacho */
    public dlgModificacionOrdenDespacho(java.awt.Frame parent, boolean modal) {
        super(parent, modal);
        initComponents();
    }

    public dlgModificacionOrdenDespacho(pnfMantenimientoOrdenDespacho parent, boolean modal, beUsuario usuario) {
        super((java.awt.Frame)null, modal);
        initComponents();
        this.usuario = usuario;
        visualHelper.centrarDialogoEnPantalla(this);
        try{
            int fila = parent.getTblOrdenesDespacho().getSelectedRow();
            int idOrdenDespacho = Integer.parseInt(parent.getTblOrdenesDespacho().getValueAt(fila, 0).toString());
            this.ordenDespacho = (new blOrdenDespacho()).obtenerOrdenPorID(idOrdenDespacho);
            this.dtcFechaDespacho.setDate(this.ordenDespacho.getFechaDespacho());
            this.txtOperario.setText(this.ordenDespacho.getOperario());
            DefaultTableModel dtm = (DefaultTableModel)this.tblPedidos.getModel();
            this.limpiarTabla(dtm);
            this.llenarTabla(this.ordenDespacho.getPedidos());
        }
        catch(Exception e){
            e.printStackTrace();
            visualHelper.mostrarMensajeError("Ocurrió un error al cargar el diálogo");
        }
    }
    
    private void limpiarTabla(DefaultTableModel dtm) {
        int numFilas = dtm.getRowCount();
        for(int i=(numFilas-1);i>=0;i--)
            dtm.removeRow(i);
    }

    private void llenarTabla(ArrayList<bePedido> pedidos) {
        DefaultTableModel dtm = (DefaultTableModel)this.tblPedidos.getModel();
        Object [] datos = new Object [6];
        for(int i=0;i<pedidos.size();i++){
            datos[0] = pedidos.get(i).getIdPedido();
            datos[1] = pedidos.get(i).getCliente().getRazonSocial();
            datos[2] = pedidos.get(i).getFechaPedido().toString();
            datos[3] = pedidos.get(i).getFechaEntrega().toString();
            dtm.addRow(datos);
        }
        this.tblPedidos.setRowSelectionAllowed(true);
        this.tblPedidos.setColumnSelectionAllowed(false);
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        btnCancelar = new javax.swing.JButton();
        lblTitulo = new javax.swing.JLabel();
        btnModificar = new javax.swing.JButton();
        btnLimpiar = new javax.swing.JButton();
        jPanel1 = new javax.swing.JPanel();
        lblPedidos = new javax.swing.JLabel();
        jScrollPane3 = new javax.swing.JScrollPane();
        tblPedidos = new javax.swing.JTable();
        dtcFechaDespacho = new com.toedter.calendar.JDateChooser();
        btnAgregarPedidos = new javax.swing.JButton();
        lblFechaDespacho1 = new javax.swing.JLabel();
        lblCodigoOrdenDespacho = new javax.swing.JLabel();
        txtOperario = new javax.swing.JTextField();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setAlwaysOnTop(true);
        setMinimumSize(new java.awt.Dimension(660, 450));
        setModal(true);
        setResizable(false);
        getContentPane().setLayout(null);

        btnCancelar.setBackground(new java.awt.Color(240, 235, 226));
        btnCancelar.setFont(new java.awt.Font("Dialog", 0, 12));
        btnCancelar.setForeground(new java.awt.Color(0, 0, 0));
        btnCancelar.setText("Cancelar");
        btnCancelar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnCancelarActionPerformed(evt);
            }
        });
        getContentPane().add(btnCancelar);
        btnCancelar.setBounds(430, 370, 130, 27);

        lblTitulo.setFont(new java.awt.Font("Dialog", 0, 36));
        lblTitulo.setForeground(new java.awt.Color(0, 0, 0));
        lblTitulo.setText("Modificación de orden de despacho");
        getContentPane().add(lblTitulo);
        lblTitulo.setBounds(10, 10, 639, 43);

        btnModificar.setBackground(new java.awt.Color(240, 235, 226));
        btnModificar.setFont(new java.awt.Font("Dialog", 0, 12));
        btnModificar.setForeground(new java.awt.Color(0, 0, 0));
        btnModificar.setText("Modificar");
        btnModificar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnModificarActionPerformed(evt);
            }
        });
        getContentPane().add(btnModificar);
        btnModificar.setBounds(90, 370, 120, 27);

        btnLimpiar.setBackground(new java.awt.Color(240, 235, 226));
        btnLimpiar.setFont(new java.awt.Font("Dialog", 0, 12));
        btnLimpiar.setForeground(new java.awt.Color(0, 0, 0));
        btnLimpiar.setText("Limpiar");
        getContentPane().add(btnLimpiar);
        btnLimpiar.setBounds(250, 370, 140, 27);

        jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)), "Orden de despacho", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Dialog", 0, 14), new java.awt.Color(0, 0, 0))); // NOI18N
        jPanel1.setLayout(null);

        lblPedidos.setFont(new java.awt.Font("Dialog", 0, 14));
        lblPedidos.setForeground(new java.awt.Color(0, 0, 0));
        lblPedidos.setText("Pedidos");
        jPanel1.add(lblPedidos);
        lblPedidos.setBounds(20, 110, 120, 17);

        tblPedidos.setAutoCreateRowSorter(true);
        tblPedidos.setForeground(new java.awt.Color(0, 0, 0));
        tblPedidos.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "Codigo pedido", "Cliente", "Fecha pedido", "Fecha entrega"
            }
        ) {
            Class[] types = new Class [] {
                java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.Object.class
            };
            boolean[] canEdit = new boolean [] {
                false, false, false, false
            };

            public Class getColumnClass(int columnIndex) {
                return types [columnIndex];
            }

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        tblPedidos.setColumnSelectionAllowed(true);
        tblPedidos.setGridColor(javax.swing.UIManager.getDefaults().getColor("TableHeader.background"));
        tblPedidos.setMaximumSize(new java.awt.Dimension(800, 72));
        tblPedidos.setMinimumSize(new java.awt.Dimension(200, 72));
        tblPedidos.setSelectionForeground(new java.awt.Color(0, 0, 0));
        tblPedidos.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
        jScrollPane3.setViewportView(tblPedidos);
        tblPedidos.getColumnModel().getSelectionModel().setSelectionMode(javax.swing.ListSelectionModel.SINGLE_INTERVAL_SELECTION);

        jPanel1.add(jScrollPane3);
        jScrollPane3.setBounds(20, 140, 450, 100);
        jPanel1.add(dtcFechaDespacho);
        dtcFechaDespacho.setBounds(190, 30, 160, 27);

        btnAgregarPedidos.setBackground(new java.awt.Color(240, 235, 226));
        btnAgregarPedidos.setFont(new java.awt.Font("Dialog", 0, 12));
        btnAgregarPedidos.setForeground(new java.awt.Color(0, 0, 0));
        btnAgregarPedidos.setText("Crear nueva lista de pedidos");
        btnAgregarPedidos.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnAgregarPedidosActionPerformed(evt);
            }
        });
        jPanel1.add(btnAgregarPedidos);
        btnAgregarPedidos.setBounds(250, 260, 210, 27);

        lblFechaDespacho1.setFont(new java.awt.Font("Dialog", 0, 12));
        lblFechaDespacho1.setForeground(new java.awt.Color(0, 0, 0));
        lblFechaDespacho1.setText("Fecha despacho");
        jPanel1.add(lblFechaDespacho1);
        lblFechaDespacho1.setBounds(30, 30, 120, 15);

        lblCodigoOrdenDespacho.setFont(new java.awt.Font("Dialog", 0, 12));
        lblCodigoOrdenDespacho.setForeground(new java.awt.Color(0, 0, 0));
        lblCodigoOrdenDespacho.setText("Operario");
        jPanel1.add(lblCodigoOrdenDespacho);
        lblCodigoOrdenDespacho.setBounds(30, 70, 54, 15);
        jPanel1.add(txtOperario);
        txtOperario.setBounds(190, 70, 160, 27);

        getContentPane().add(jPanel1);
        jPanel1.setBounds(60, 50, 500, 300);

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void btnCancelarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnCancelarActionPerformed
        int rslt = JOptionPane.showConfirmDialog(this, "¿Desea cancelar la modificación?", "Confirmación", JOptionPane.YES_NO_OPTION);
        if (rslt == JOptionPane.YES_OPTION){
            this.setVisible(false);
            this.dispose();
        }
}//GEN-LAST:event_btnCancelarActionPerformed

    private void btnAgregarPedidosActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnAgregarPedidosActionPerformed
        // TODO add your handling code here:
        dlgSeleccionarPedidos scp = new dlgSeleccionarPedidos(this, true,this.ordenDespacho.getIdOrdenDespacho());
        scp.setVisible(true);
        if (scp.getPedidosElegidos() != null){
            this.pedidosNuevosElegidos = scp.getPedidosElegidos();
            DefaultTableModel dtm = (DefaultTableModel)this.tblPedidos.getModel();
            this.limpiarTabla(dtm);
            this.llenarTabla(this.pedidosNuevosElegidos);
        } else
            visualHelper.mostrarMensajeError("No se eligió ningún pedido.");
        scp.dispose();
}//GEN-LAST:event_btnAgregarPedidosActionPerformed

    private void btnModificarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnModificarActionPerformed
        // TODO add your handling code here:
        try{
            String strOperario = this.txtOperario.getText();
            if (!strOperario.isEmpty()){
                Date fecActual = visualHelper.obtenerFechaCalendario(dtcFechaDespacho);
                if (fecActual != null){
                    Date fecHoy = (new blHelper()).dameFechaHoy();
                    if (fecActual.compareTo(fecHoy)>0){
                        if (this.validarTabla()){
                            this.ordenDespacho.setOperario(this.txtOperario.getText());
                            this.ordenDespacho.setFechaDespacho(visualHelper.obtenerFechaCalendario(dtcFechaDespacho));
                            (new blOrdenDespacho()).modificarOrdenDespacho(this.ordenDespacho,this.pedidosNuevosElegidos);
                            visualHelper.mostrarMensajeSatisfaccion("Se modificó satisfactoriamente la orden");
                            (new blLog()).registrarLog(this.usuario.getIdUsuario(), this.usuario.getCargo(), "Se modificó la orden con código "+this.ordenDespacho.getIdOrdenDespacho());
                            this.setVisible(false);
                            this.dispose();
                        }
                        else
                            visualHelper.mostrarMensajeAdvertencia("Debe ingresar por lo menos un pedido.");
                    }
                    else
                        visualHelper.mostrarMensajeAdvertencia("La fecha de despacho debe ser posterior al día de hoy.");
                }
                else
                    visualHelper.mostrarMensajeAdvertencia("Debe indicar una fecha de despacho");
            }
            else
                visualHelper.mostrarMensajeAdvertencia("Debe especificar un operario");
        }
        catch(Exception e){
            e.printStackTrace();
            visualHelper.mostrarMensajeError("Ocurrió un error al modificar la orden.");
        }
    }//GEN-LAST:event_btnModificarActionPerformed

    private boolean validarTabla(){
        return (this.tblPedidos.getRowCount()>0);
    }

    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                dlgModificacionOrdenDespacho dialog = new dlgModificacionOrdenDespacho(new javax.swing.JFrame(), true);
                dialog.addWindowListener(new java.awt.event.WindowAdapter() {
                    public void windowClosing(java.awt.event.WindowEvent e) {
                        System.exit(0);
                    }
                });
                dialog.setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnAgregarPedidos;
    private javax.swing.JButton btnCancelar;
    private javax.swing.JButton btnLimpiar;
    private javax.swing.JButton btnModificar;
    private com.toedter.calendar.JDateChooser dtcFechaDespacho;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JScrollPane jScrollPane3;
    private javax.swing.JLabel lblCodigoOrdenDespacho;
    private javax.swing.JLabel lblFechaDespacho1;
    private javax.swing.JLabel lblPedidos;
    private javax.swing.JLabel lblTitulo;
    private javax.swing.JTable tblPedidos;
    private javax.swing.JTextField txtOperario;
    // End of variables declaration//GEN-END:variables


}
